/****************************************************************************\
 * @file    game_fuc.h
 * @author  马新硕
 * @date    2022/09/20
 * @brief   游戏的主要执行函数
 * @note    碰撞判断、地图更新等等
 ******************************************************************************
 * @attent  
 ****************************************************************************/
#ifndef _H_GAME_FUC
#define _H_GAME_FUC

#include "stdint.h"
#include "stdlib.h"
#include "math.h"
#include "cmsis_os2.h"
#include "Joystick.h"
#include "bsp_ili9341_lcd.h"
#include "game_pic.h"
#include "game_math.h"
#include "game_flow.h"
#include "game_map.h"

#define ENEMIES_MAX 8
#define BOSS_MAX 6
#define USERSBULLET_MAX  15
#define ENEMIESBULLET_MAX  50
#define MAPBARRIER_MAX  31
#define MAPDESBARRIER_MAX  31

extern UsersRole_t *usersrole;//玩家角色
extern Barrier_t mapBarrier[MAPBARRIER_MAX];//地图不可破坏障碍物
extern DestructibleBarrier_t mapDesBarrier[MAPBARRIER_MAX];//地图可破坏障碍物

/****************初始化游戏****************/
void game_Init(void);

/****************玩家和怪物操作****************/
void usersControl(void);
void usersShoot(void);
void usersShieldRecover(void);
void usersAttack(void);
void enemies_Move(void);
void boss_Move(void);


/****************碰撞检测****************/
void users_and_mapblock_Crash(void);
void users_and_enemies_Crash(void);
void users_and_enemiesbullet_Crash(void);
void usersbullet_and_enemies_Crash(void);
void usersattack_and_enemies_Crash(void);
void usersbullet_and_mapblock_Crash(void);
void enemies_and_mapblock_Crash(void);
void enemiesbullet_and_mapblock_Crash(void);
void enemies_and_enemies_Crash(void);


/****************更新画面****************/
void map_and_userscondition_Update(void);
void users_Update(void);
void enemies_Update(void);
void bullet_Update(void);

/****************生成子弹****************/
void usersBullet_Create(uint8_t bulletType);
void enemiesBullet_Create(void);
void enemiesTrack(void);
void BossBullet1_Create(void);
void BossBulletChat_Create(void);
void BossFire_Create(void);
void enemiesTrackBullet_Create(void);

/****************Boss状态****************/
void Boss_weak(void);
void Boss_strong(void);

/****************绘制地图****************/
void statusBarUpdate(void);
void mapBoundaryUpdate(void);
void mapFloorUpdate(void);
void mapBarrierUpdate(void);
void mapDesBarrierUpdate(void);

/****************绘制游戏界面****************/
void gameLevel_Init(uint8_t *levelNum);
void startGameSurfaceCreate(void);
void TansferSurfaceCreate(void);
void endGameSurfaceCreate(void);

/****************闯关结束条件判断****************/
uint8_t endGameLevelCheck(void);
void ClearEnemies(void);

#endif
